package editorsvg.editor.vista;

import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;

/**
 *
 * @author Jorge Berjano
 */
public interface ConversorCoordenadas {

    void setOrigen(Point2D origen);


    /**
     * Convierte una medida de unidades reales a pixeles.
     */      
    int aPixeles(double medidaReal);
    
    /**
     * Convierte un punto de unidades reales a pixeles segun la vista actual.
     */
    Point aPixeles(Point2D puntoReal);

    /**
     * Convierte una dimension de unidades reales a pixeles segun la vista actual.
     */
    Dimension aPixeles(Dimension2D dimensionReal);

    /**
     * Convierte un rectangulo de unidades reales a pixeles segun la vista actual.
     */
    Rectangle aPixeles(Rectangle2D retanguloReal);
    
    /**
     * Convierte una medida de pixeles a unidades reales.
     */   
    double aUnidadesReales(int medidaPixeles);

    /**
     * Convierte un punto de pixeles a unidades reales.
     */
    Point2D.Double aUnidadesReales(Point puntoPixeles);

    /**
     * Convierte una dimension de pixeles a unidades reales.
     */
    Dimension2D aUnidadesReales(Dimension dimensionPixeles);

    /**
     * Convierte un rectangulo de pixeles a unidades reales.
     */
    Rectangle2D aUnidadesReales(Rectangle rectanguloPixels);

    /**
     * Acerca o aleja el punto de vista del documento.
     */
    boolean zoom(double zoom);

    /**
     * Modifica un contexto grafico para fijar el punto de vista.
     */
//    void establecerPuntoVista(Graphics2D g);
    
    AffineTransform getAffineTransform();

    /**
     * Asigna el factor de acercamiento (zoom) de la vista actual.
     */
    void setZoom(double zoom);
    
    /**
     * Obtiene el factor de acercamiento (zoom) de la vista actual.
     */
    double getZoom();
    
//    void setTamañoVistaPixeles(Dimension tamañoPantallaPixels);
//    
//    Dimension getTamañoVistaPixeles();
    
    Shape transformarAPixeles(Shape shape);

}
